package com.sisgesbyte.services.ventas;

import java.util.ArrayList;
import java.util.List;

import javax.ejb.EJB;
import javax.ejb.Stateless;
import javax.inject.Inject;

import com.sisgesbyte.common.ConstModAdministracion;
import com.sisgesbyte.common.ConstModVentas;
import com.sisgesbyte.common.ConstantesInternasSistema;
import com.sisgesbyte.common.Validaciones;
import com.sisgesbyte.dao.beanDao.ClienteDatosGeneralesRequest;
import com.sisgesbyte.dao.beanDao.ClienteListaResponse;
import com.sisgesbyte.dao.beanDao.ClienteLocalesRequest;
import com.sisgesbyte.dao.beanDao.ClienteRegistroRequest;
import com.sisgesbyte.dao.beanDao.ComunObjetoRequest;
import com.sisgesbyte.dao.beanDao.FiltrosSQLBean;
import com.sisgesbyte.dao.comun.MantenimientoComunObjetoDao;
import com.sisgesbyte.dao.ventas.MantLocalesClienteDao;
import com.sisgesbyte.dao.ventas.MantenimientoClienteDao;
import com.sisgesbyte.data.entity.comun.ComunObjetoResponseEntity;
import com.sisgesbyte.data.entity.comun.GenericEntity;
import com.sisgesbyte.data.entity.ventas.ClienteEntity;
import com.sisgesbyte.data.entity.ventas.LocalesClientesEntity;
import com.sisgesbyte.data.entity.ventas.NuevoClienteEntity;
import com.sisgesbyte.services.commonBean.GenericResponse;
import com.sisgesbyte.services.ventas.bean.ClienteBean;
import com.sisgesbyte.services.ventas.bean.ClienteBeanRequest;
import com.sisgesbyte.services.ventas.bean.ClienteDatosGeneralesBean;
import com.sisgesbyte.services.ventas.bean.ClienteLocalesBean;
import com.sisgesbyte.services.ventas.bean.ListaClienteLocalesRes;

@Stateless
public class MantenimientoClienteImpl implements MantenimientoCliente {
	
	@EJB
	private MantenimientoClienteDao mantenimientoClienteDao;
	@EJB
	private MantLocalesClienteDao mantLocalesClienteDao;
	@EJB
	private MantenimientoComunObjetoDao mantenimientoComunObjetoDao;
	
	@Inject
	private Validaciones validaciones;

	@Override
	public ClienteListaResponse listarClientes(String codTransaccion, FiltrosSQLBean cadenaFiltros) {
		String mensajeTransaccionMetodo = "[listarClientes idTx=" + codTransaccion + "] - ";
		ClienteListaResponse response = new ClienteListaResponse();
		
		try{
			 response.setIdTransaccion(codTransaccion);
			 List<ClienteEntity> resDao = null;
			try{
				resDao = mantenimientoClienteDao.listaClientes(cadenaFiltros);
			}catch(Exception e){
				System.out.println(mensajeTransaccionMetodo + "Hubo un error al listar " +e);
				response.setCodigoRespuesta(ConstModAdministracion.MANT_LISTAR_COD_IDT);
				response.setMensajeRespuesta(ConstModAdministracion.MANT_LISTAR_MSJ_IDT.replace("msj", mensajeTransaccionMetodo));
				return response;
			}
			if(resDao.size() > 0){
				List<ClienteBean> lista = new ArrayList<ClienteBean>();
				for(ClienteEntity row : resDao){
					ClienteBean bean = new ClienteBean();
						bean.setActiveCliente(row.getActive_cliente());
						bean.setApellido(validaciones.validarCamposString(row.getApellido()));
						bean.setCategoriaCliente(validaciones.validarCamposString(row.getCategoria_cliente()));
						bean.setCategoriaClienteId(validaciones.validarCampoInteger(row.getCategoria_cliente_id()));
						bean.setCiudad(validaciones.validarCamposString(row.getCiudad()));
						bean.setCiudadId(row.getCiudad_id());
						bean.setCodCliente(validaciones.validarCamposString(row.getCod_cliente()));
						bean.setCodLocal(validaciones.validarCamposString(row.getCod_local()));
						bean.setDistrito(validaciones.validarCamposString(row.getDistrito()));
						bean.setDistritoId(row.getDistrito_id());
						bean.setDivisionPais(validaciones.validarCamposString(row.getDivision_pais()));
						bean.setDivisionPaisId(validaciones.validarCampoInteger(row.getDivision_pais_id()));
						bean.setFechaNacimiento(validaciones.transformarDateString(row.getFecha_nacimiento()));
						bean.setIdCliente(validaciones.validarCampoInteger(row.getId_cliente()));
						bean.setIdClienteLocal(validaciones.validarCampoInteger(row.getId_cliente_local()));
						bean.setIdObjetoCliente(validaciones.validarCampoInteger(row.getId_objeto_cliente()));
						bean.setLocalActivo(row.getLocal_activo());
						bean.setLocalPrincipal(row.getLocal_principal());
						bean.setNombre(validaciones.validarCamposString(row.getNombre()));
						bean.setNumDoc(validaciones.validarCamposString(row.getNum_doc()));
						bean.setPais(validaciones.validarCamposString(row.getPais()));
						bean.setPaisId(validaciones.validarCampoInteger(row.getPais_id()));
						bean.setRazonSocial(validaciones.validarCamposString(row.getRazon_social()));
						bean.setTipoIdentificacion(validaciones.validarCamposString(row.getTipo_identificacion()));
						bean.setTipoIdentificacionId(validaciones.validarCampoInteger(row.getTipo_identificacion_id()));
						bean.setZonaId(row.getZona_id());
						if(row.getTipo_identificacion_id() ==1){
							bean.setNombreAmostrar(validaciones.validarCamposString(row.getRazon_social()));
						}else{
							bean.setNombreAmostrar(row.getApellido() + " " + row.getNombre());
						}
					lista.add(bean);
				}
				response.setListaClientes(lista);
				response.setCodigoRespuesta(ConstantesInternasSistema.CODIGO_EXITO);
				response.setMensajeRespuesta(ConstantesInternasSistema.MENSAJE_EXITO);
			}else{
				response.setCodigoRespuesta(ConstModAdministracion.MANT_LISTAR_COD_IDF);
				response.setMensajeRespuesta(ConstModAdministracion.MANT_LISTAR_MSJ_IDF.replace("msj", mensajeTransaccionMetodo));
			}
			
		}catch(Exception e){
			System.out.println(mensajeTransaccionMetodo + "Hubo un error en el proceso" +e);
			response.setCodigoRespuesta(ConstModAdministracion.MANT_LISTAR_COD_IDT);
			response.setMensajeRespuesta(ConstModAdministracion.MANT_LISTAR_MSJ_IDT.replace("msj", mensajeTransaccionMetodo));
			return response;
		}
		
		return response;
	}

	@Override
	public GenericResponse nuevoCliente(String codTransaccion, ClienteBeanRequest cliente) {
		String mensajeTransaccionMetodo = "[nuevoCliente idTx=" + codTransaccion + "] - ";
		GenericResponse response = new GenericResponse();
		try{
			
			if(cliente != null && cliente.getDatosGeneralesBean() != null){
				
				ComunObjetoRequest request = new ComunObjetoRequest();
				request.setTipoObjetoId(Integer.valueOf(validaciones.validarCamposString(ConstModVentas.COD_OBJETO_CLIENTES)));
				request.setTipoIdentificacionId(cliente.getDatosGeneralesBean().getIdTipoIdentificacion());
				request.setNumDoc(validaciones.validarCamposString(cliente.getDatosGeneralesBean().getNumDoc()));
				request.setRazonSocial(validaciones.validarCamposString(cliente.getDatosGeneralesBean().getRazonSocial()));
				request.setNombre(validaciones.validarCamposString(cliente.getDatosGeneralesBean().getNombre()));
				request.setApellido(validaciones.validarCamposString(cliente.getDatosGeneralesBean().getApellido()));
				request.setFechaNacimiento(validaciones.transformarStringDate(cliente.getDatosGeneralesBean().getFechaNacimiento()));
				ComunObjetoResponseEntity resDaoObjeto = null;
				try{
					System.out.println("// 1.- Registramos los datos generales del cliente");
					// 1.- Registramos los datos generales del cliente
					resDaoObjeto = mantenimientoComunObjetoDao.guardarComunObjeto(request);
					
				}catch(Exception e){
					System.out.println(mensajeTransaccionMetodo + "No se pudo guardar los datos generales del cliente " +e);
					response.setCodigoRespuesta(ConstModAdministracion.MANT_NUEVO_COD_IDT);
					response.setMensajeRespuesta(ConstModAdministracion.MANT_NUEVO_MSJ_IDT.replace("msj", mensajeTransaccionMetodo));
					return response;
				}
				System.out.println("Resultado Actividad 1: " +resDaoObjeto.getCod_error() );
				if(resDaoObjeto.getCod_error() == (Integer.valueOf(ConstantesInternasSistema.CODIGO_EXITO))){
					
					ClienteDatosGeneralesRequest nuevoCliente = new ClienteDatosGeneralesRequest();
					nuevoCliente.setIdCategoriaCliente(cliente.getDatosGeneralesBean().getIdCategoriaCliente());
					nuevoCliente.setIdObjetoComun(resDaoObjeto.getId());
					nuevoCliente.setActiveCliente(cliente.getDatosGeneralesBean().getActiveCliente());
					NuevoClienteEntity resDaoCliente = null;
					try{
						System.out.println("//2.- Registramos el cliente ");
						//2.- Registramos el cliente
						resDaoCliente = mantenimientoClienteDao.guardarCliente(nuevoCliente);
					}catch(Exception e){
						System.out.println(mensajeTransaccionMetodo + "No se pudo registrar el cliente " +e);
						response.setCodigoRespuesta(ConstModAdministracion.MANT_NUEVO_COD_IDT);
						response.setMensajeRespuesta(ConstModAdministracion.MANT_NUEVO_MSJ_IDT.replace("msj", mensajeTransaccionMetodo));
						return response;
					}
					System.out.println("Resultado Actividad 2: " +resDaoCliente.getCod_error() );
					if(resDaoCliente.getCod_error() == Integer.valueOf(ConstantesInternasSistema.CODIGO_EXITO)){
						
						if(cliente.getListaLocales() !=null && cliente.getListaLocales().size() > 0){
							System.out.println("//3.- Registramos los locales");
							//3.- Registramos los locales
								for(ClienteLocalesBean ls :cliente.getListaLocales()){
									//le seteamos el Id del cliente 
									ls.setClienteId(resDaoCliente.getIdcliente());
									GenericResponse crudLocal= crudLocalesCliente(ls,codTransaccion );			
									System.out.println("Respuesta de la Actividad 3 : " + crudLocal.getCodigoRespuesta());
								}
							}
							response.setCodigoRespuesta(ConstantesInternasSistema.CODIGO_EXITO);
							response.setMensajeRespuesta(ConstantesInternasSistema.MENSAJE_EXITO);
						}else{
							System.out.println(mensajeTransaccionMetodo + "No se encontraron Locales para registrar");
							response.setCodigoRespuesta(ConstModAdministracion.MANT_EDITAR_COD_IDF);
							response.setMensajeRespuesta(ConstModAdministracion.MANT_EDITAR_MSJ_IDF.replace("msj", mensajeTransaccionMetodo));
						}
					}else{
						System.out.println(mensajeTransaccionMetodo + "No se pudo registrar el cliente " );
						response.setCodigoRespuesta(ConstModAdministracion.MANT_NUEVO_COD_IDF);
						response.setMensajeRespuesta(ConstModAdministracion.MANT_NUEVO_MSJ_IDF.replace("msj", mensajeTransaccionMetodo + resDaoObjeto.getCod_error()));
					}
				}else{
					System.out.println(mensajeTransaccionMetodo + "Objeto cliente esta Vacio");
					response.setCodigoRespuesta(ConstModAdministracion.MANT_EDITAR_COD_IDF);
					response.setMensajeRespuesta(ConstModAdministracion.MANT_EDITAR_MSJ_IDF.replace("msj", mensajeTransaccionMetodo));
				}
			
		}catch(Exception e){
			System.out.println(mensajeTransaccionMetodo + "Hubo un error en el proceso " +e);
			response.setCodigoRespuesta(ConstModAdministracion.MANT_NUEVO_COD_IDT);
			response.setMensajeRespuesta(ConstModAdministracion.MANT_NUEVO_MSJ_IDT.replace("msj", mensajeTransaccionMetodo));
			return response;
		}
		return response;
	}

	@Override
	public GenericResponse editarCliente(String codTransaccion, ClienteBeanRequest cliente) {
		String mensajeTransaccionMetodo = "[editarCliente idTx=" + codTransaccion + "] - ";
		GenericResponse response = new GenericResponse();
		
		try{
			if(cliente!= null){
				ClienteDatosGeneralesBean datos =  cliente.getDatosGeneralesBean();
				
				ClienteDatosGeneralesRequest datosCliente = new ClienteDatosGeneralesRequest();
				datosCliente.setIdCliente(datos.getIdCliente());
				datosCliente.setIdCategoriaCliente(datos.getIdCategoriaCliente());
				datosCliente.setActiveCliente(datos.getActiveCliente());
				
				System.out.println("//1.- Actualizamos los datos  la tabla cliente.");
				//1.- Actualizamos los datos  la tabla cliente.
				GenericEntity resDaoCliente = null;
				try{
					resDaoCliente = mantenimientoClienteDao.actualizarCliente(datosCliente);
				}catch(Exception e){
					System.out.println("Error en BD " + e);
					response.setCodigoRespuesta(ConstModAdministracion.MANT_EDITAR_COD_IDT);
					response.setMensajeRespuesta(ConstModAdministracion.MANT_EDITAR_MSJ_IDT.replace("msj", mensajeTransaccionMetodo));
					return response;
				}
				System.out.println("Codigo de Respuesta de Actividad 1 : " + resDaoCliente.getCod_error());
				if(resDaoCliente.getCod_error() == Integer.valueOf(ConstantesInternasSistema.CODIGO_EXITO)){
				
					ComunObjetoRequest datosGenerales = new ComunObjetoRequest();
					datosGenerales.setApellido(validaciones.validarCamposString(datos.getApellido()));
					datosGenerales.setFechaNacimiento(validaciones.transformarStringDate(datos.getFechaNacimiento()));
					datosGenerales.setId(datos.getIdComunObjeto());
					datosGenerales.setNombre(validaciones.validarCamposString(datos.getNombre()));
					datosGenerales.setNumDoc(validaciones.validarCamposString(datos.getNumDoc()));
					datosGenerales.setRazonSocial(validaciones.validarCamposString(datos.getRazonSocial()));
					datosGenerales.setTipoIdentificacionId(datos.getIdTipoIdentificacion());
					
					GenericEntity resDaoGenerales = null;
					try{
						System.out.println("//2.- Actualizamos los datos generales del cliente de la tabla objetoComun");
						//2.- Actualizamos los datos generales del cliente de la tabla objetoComun
						resDaoGenerales = mantenimientoComunObjetoDao.actualizarComunObjeto(datosGenerales);
					}catch(Exception e){
						System.out.println("Error en BD " + e);
						response.setCodigoRespuesta(ConstModAdministracion.MANT_EDITAR_COD_IDT);
						response.setMensajeRespuesta(ConstModAdministracion.MANT_EDITAR_MSJ_IDT.replace("msj", mensajeTransaccionMetodo));
						return response;
					}
					System.out.println("Codigo de Respuesta de Actividad 2 : " + resDaoGenerales.getCod_error());
					if(resDaoGenerales.getCod_error()== Integer.valueOf(ConstantesInternasSistema.CODIGO_EXITO)){
						System.out.println("Numero de locales a hacer CRUD : " + cliente.getListaLocales().size());
						if(cliente.getListaLocales() !=null && cliente.getListaLocales().size() > 0){
							for(ClienteLocalesBean ls : cliente.getListaLocales()){
								//seteamos el codigo del cliente
								ls.setClienteId(datos.getIdCliente());
								System.out.println("Hacemos Crud de Locales del cliente");
								GenericResponse crudLocal= crudLocalesCliente(ls,codTransaccion );			
								
							}
						}
						System.out.println(mensajeTransaccionMetodo + "Solo se Actualizo Correctamente");
						response.setCodigoRespuesta(ConstantesInternasSistema.CODIGO_EXITO);
						response.setMensajeRespuesta(ConstantesInternasSistema.MENSAJE_EXITO);

					}else{
						System.out.println(mensajeTransaccionMetodo + "No se pudo actualizar la tabla Cliente");
						response.setCodigoRespuesta(ConstModAdministracion.MANT_EDITAR_COD_IDF);
						response.setMensajeRespuesta(ConstModAdministracion.MANT_EDITAR_MSJ_IDF.replace("msj", mensajeTransaccionMetodo + resDaoCliente.getMsj_error()));
					}
				}else{
					System.out.println(mensajeTransaccionMetodo + "No se pudo actualizar datos generales del cliente de la tabla objetoComun");
					response.setCodigoRespuesta(ConstModAdministracion.MANT_EDITAR_COD_IDF);
					response.setMensajeRespuesta(ConstModAdministracion.MANT_EDITAR_MSJ_IDF.replace("msj", mensajeTransaccionMetodo + resDaoCliente.getMsj_error()));
				}
			}else{
				System.out.println(mensajeTransaccionMetodo + "Parametro de entrada cliente esta vacio");
				response.setCodigoRespuesta(ConstModAdministracion.MANT_EDITAR_COD_IDF);
				response.setMensajeRespuesta(ConstModAdministracion.MANT_EDITAR_MSJ_IDF.replace("msj", mensajeTransaccionMetodo));
			}
		}catch(Exception e){
			System.out.println("Error en BD " + e);
			response.setCodigoRespuesta(ConstModAdministracion.MANT_EDITAR_COD_IDT);
			response.setMensajeRespuesta(ConstModAdministracion.MANT_EDITAR_MSJ_IDT.replace("msj", mensajeTransaccionMetodo));
		}
			
		return response;
	}

	@Override
	public GenericResponse deleteCliente(String codTransaccion, ClienteBeanRequest cliente) {
		String mensajeTransaccionMetodo = "[deleteCliente idTx=" + codTransaccion + "] - ";
		GenericResponse response = new GenericResponse();
		
		if(cliente != null){
			try{
				//1.- Eliminamos locales del cliente
				System.out.println("//1.- Eliminamos locales del cliente");
				try{
					for(ClienteLocalesBean ls : cliente.getListaLocales()){
						System.out.println("Ejecutamos la eliminacion");
						GenericResponse crudLocal= crudLocalesCliente(ls,codTransaccion );
						System.out.println("Salida de crud");
					}
				}catch(Exception e){
					System.out.println("Error al tratar de eliminar los locales del cliente ");
					response.setCodigoRespuesta(ConstModAdministracion.MANT_EDITAR_COD_IDT);
					response.setMensajeRespuesta(ConstModAdministracion.MANT_EDITAR_MSJ_IDT.replace("msj", mensajeTransaccionMetodo));
					return response;
				}
				
				try{
					//3.- eliminamos cliente
					GenericEntity resDaoCliente = mantenimientoClienteDao.eliminarCliente(cliente.getDatosGeneralesBean().getIdCliente());
				}catch(Exception e){
					System.out.println(mensajeTransaccionMetodo + "Hubo un error al eliminar cliente   en BD " +e);
					response.setCodigoRespuesta(ConstModAdministracion.MANT_EDITAR_COD_IDT);
					response.setMensajeRespuesta(ConstModAdministracion.MANT_EDITAR_MSJ_IDT.replace("msj", mensajeTransaccionMetodo));
					return response;
				}
				GenericEntity resDaoObjetos=null;
				try{
					//4.- eliminamos datos del cliente
					resDaoObjetos = mantenimientoComunObjetoDao.eliminarComunObjeto(cliente.getDatosGeneralesBean().getIdComunObjeto());
				}catch(Exception e){
					System.out.println(mensajeTransaccionMetodo + "Hubo un error al eliminar Objetos(Datos personal) del cliente   en BD " +e);
					response.setCodigoRespuesta(ConstModAdministracion.MANT_EDITAR_COD_IDT);
					response.setMensajeRespuesta(ConstModAdministracion.MANT_EDITAR_MSJ_IDT.replace("msj", mensajeTransaccionMetodo));
					return response;
				}
				if(resDaoObjetos.getCod_error() == Integer.valueOf(ConstantesInternasSistema.CODIGO_EXITO)){
					response.setCodigoRespuesta(ConstantesInternasSistema.CODIGO_EXITO);
					response.setMensajeRespuesta(ConstantesInternasSistema.MENSAJE_EXITO);

				}else{
					response.setCodigoRespuesta(ConstModAdministracion.MANT_EDITAR_COD_IDF);
					response.setMensajeRespuesta(ConstModAdministracion.MANT_EDITAR_MSJ_IDF.replace("msj", mensajeTransaccionMetodo + resDaoObjetos.getCod_error()));

				}
											
			}catch(Exception e){
				System.out.println(mensajeTransaccionMetodo + "Hubo un error al eliminar  en BD " +e);
				response.setCodigoRespuesta(ConstModAdministracion.MANT_EDITAR_COD_IDT);
				response.setMensajeRespuesta(ConstModAdministracion.MANT_EDITAR_MSJ_IDT.replace("msj", mensajeTransaccionMetodo));
			}
		}else{
			System.out.println(mensajeTransaccionMetodo + "Parametro de entrada cliente esta vacio");
			response.setCodigoRespuesta(ConstModAdministracion.MANT_EDITAR_COD_IDF);
			response.setMensajeRespuesta(ConstModAdministracion.MANT_EDITAR_MSJ_IDF.replace("msj", mensajeTransaccionMetodo));
		}
		
		return response;
	}

	@Override
	public ListaClienteLocalesRes listaClienteLocales(String codTransaccion, FiltrosSQLBean cadenaFiltros) {
		String mensajeTransaccionMetodo = "[listaClienteLocales idTx=" + codTransaccion + "] - ";
		ListaClienteLocalesRes response = new ListaClienteLocalesRes();
		
		try{
			 response.setIdTransaccion(codTransaccion);
			 List<LocalesClientesEntity> resDao = null;
			try{
				resDao = mantLocalesClienteDao.listaLocales(cadenaFiltros);
			}catch(Exception e){
				System.out.println(mensajeTransaccionMetodo + "Hubo un error al listar " +e);
				response.setCodigoRespuesta(ConstModAdministracion.MANT_LISTAR_COD_IDT);
				response.setMensajeRespuesta(ConstModAdministracion.MANT_LISTAR_MSJ_IDT.replace("msj", mensajeTransaccionMetodo));
				return response;
			}
			
			if(resDao.size() > 0){
				List<ClienteLocalesBean> lista = new ArrayList<ClienteLocalesBean>();
				for(LocalesClientesEntity row : resDao){
					ClienteLocalesBean bean = new ClienteLocalesBean();
						bean.setActive(row.getActive());
						bean.setCiudad(validaciones.validarCamposString(row.getCiudad()));
						bean.setClienteId(row.getCliente_id());
						bean.setCodLocal(validaciones.validarCamposString(row.getCod_local()));
						bean.setComunObjetoId(row.getComun_objeto_id());
						bean.setDepartamento(validaciones.validarCamposString(row.getDepartamento()));
						bean.setDireccion(validaciones.validarCamposString(row.getDireccion()));
						bean.setDistrito(validaciones.validarCamposString(row.getDistrito()));
						bean.setEmail(validaciones.validarCamposString(row.getEmail()));
						bean.setIdCiudad(row.getId_ciudad());
						bean.setIdDepartamento(row.getId_departamento());
						bean.setIdDistrito(row.getId_distrito());
						bean.setIdLocal(row.getId_local());
						bean.setIdPais(row.getId_pais());
						bean.setPais(validaciones.validarCamposString(row.getPais()));
						bean.setPrincipal(row.getPrincipal());
						bean.setTelefono1(validaciones.validarCamposString(row.getTelefono1()));
					lista.add(bean);
				}
				response.setListaLocalesCliente(lista);
				response.setCodigoRespuesta(ConstantesInternasSistema.CODIGO_EXITO);
				response.setMensajeRespuesta(ConstantesInternasSistema.MENSAJE_EXITO);
			}else{
				response.setCodigoRespuesta(ConstModAdministracion.MANT_LISTAR_COD_IDF);
				response.setMensajeRespuesta(ConstModAdministracion.MANT_LISTAR_MSJ_IDF.replace("msj", mensajeTransaccionMetodo));
			}
			
		}catch(Exception e){
			System.out.println(mensajeTransaccionMetodo + "Hubo un error en el proceso" +e);
			response.setCodigoRespuesta(ConstModAdministracion.MANT_LISTAR_COD_IDT);
			response.setMensajeRespuesta(ConstModAdministracion.MANT_LISTAR_MSJ_IDT.replace("msj", mensajeTransaccionMetodo));
			return response;
		}
		
		return response;
	}

	public GenericResponse crudLocalesCliente(ClienteLocalesBean localCliente, String codTransaccion){
		String mensajeTransaccionMetodo = "[crudLocalesCliente idTx=" + codTransaccion + "] - ";
		GenericResponse response = new GenericResponse();
		
		if(localCliente.getCrud().equalsIgnoreCase("add")){
			System.out.println("Agregamos local");
			
			ComunObjetoRequest nuevoObjeto = new ComunObjetoRequest();
			nuevoObjeto.setTelefono1(validaciones.validarCamposString(localCliente.getTelefono1()));
			nuevoObjeto.setDireccion(validaciones.validarCamposString(localCliente.getDireccion()));
			nuevoObjeto.setEmail(validaciones.validarCamposString(localCliente.getEmail()));
			nuevoObjeto.setPaisId(localCliente.getIdPais());
			nuevoObjeto.setDivisionPaisId(localCliente.getIdDepartamento());
			nuevoObjeto.setCiudadId(localCliente.getIdCiudad());
			nuevoObjeto.setDistritoId(localCliente.getIdDistrito());
			
			ComunObjetoResponseEntity resDaoLocal = null;
			try{
				System.out.println("//1.- Regitramos la direccion del local en la tabla objeto_comun");
				//1.- Regitramos la direccion del local en la tabla objeto_comun y nos deuelve el id creado
				resDaoLocal = mantenimientoComunObjetoDao.guardarComunObjeto(nuevoObjeto);
			}catch(Exception e){
				System.out.println(mensajeTransaccionMetodo + "No se pudo registrar la direccion del local " );
				response.setCodigoRespuesta(ConstModAdministracion.MANT_NUEVO_COD_IDT);
				response.setMensajeRespuesta(ConstModAdministracion.MANT_NUEVO_MSJ_IDT.replace("msj", mensajeTransaccionMetodo));
				return response;
			}
			System.out.println("Codigo de respuesta de la Actividad 1 : " + resDaoLocal.getCod_error());
			if(resDaoLocal.getCod_error() == Integer.valueOf(ConstantesInternasSistema.CODIGO_EXITO)){
				
				ClienteLocalesRequest nuevoLocal = new ClienteLocalesRequest();
				nuevoLocal.setIdCliente(localCliente.getClienteId());
				nuevoLocal.setIdObjetoComun(resDaoLocal.getId());
				nuevoLocal.setPrincipalLocal(localCliente.getPrincipal());
				nuevoLocal.setActiveLocal(localCliente.getActive());
				
				GenericEntity resDaoNuevoLocal = null;
				try{
					System.out.println("//2 .- registramos el cliente_local");
					//2 .- registramos el cliente_local
					resDaoNuevoLocal = mantLocalesClienteDao.nuevoLocalCliente(nuevoLocal);
					
				}catch(Exception e){
					System.out.println(mensajeTransaccionMetodo + "No se pudo registrar el cliente_local "  +e );
					response.setCodigoRespuesta(ConstModAdministracion.MANT_NUEVO_COD_IDT);
					response.setMensajeRespuesta(ConstModAdministracion.MANT_NUEVO_MSJ_IDT.replace("msj", mensajeTransaccionMetodo));
					return response;
				}
				System.out.println("Codigo de respuesta de la Actividad 2 : " + resDaoNuevoLocal.getCod_error());
				if(resDaoNuevoLocal.getCod_error()== Integer.valueOf(ConstantesInternasSistema.CODIGO_EXITO)){
					response.setCodigoRespuesta(ConstantesInternasSistema.CODIGO_EXITO);
					response.setMensajeRespuesta(ConstantesInternasSistema.MENSAJE_EXITO);
				}else{
					response.setCodigoRespuesta(ConstModAdministracion.MANT_NUEVO_COD_IDF);
					response.setMensajeRespuesta(ConstModAdministracion.MANT_NUEVO_MSJ_IDF.replace("msj", mensajeTransaccionMetodo + resDaoNuevoLocal.getCod_error()));
				}
			}
		}
		
		if(localCliente.getCrud().equalsIgnoreCase("update")){
			System.out.println("Actualizamos local");
			
			ClienteLocalesRequest activeLocal = new ClienteLocalesRequest();
			activeLocal.setActiveLocal(localCliente.getActive());
			activeLocal.setIdLocal(localCliente.getIdLocal());
			activeLocal.setPrincipalLocal(localCliente.getPrincipal());
				
				GenericEntity resDaoLocal = null;
				try{
					System.out.println("//1.- Actualizamos el local en la tabla Cliente_local");
					//1.- Actualizamos el local en la tabla Cliente_local
					resDaoLocal = mantLocalesClienteDao.actualizarLocalesCliente(activeLocal);
					
				}catch(Exception e){
					System.out.println("Error en BD " + e);
					response.setCodigoRespuesta(ConstModAdministracion.MANT_EDITAR_COD_IDT);
					response.setMensajeRespuesta(ConstModAdministracion.MANT_EDITAR_MSJ_IDT.replace("msj", mensajeTransaccionMetodo));
					return response;
				}
				System.out.println("Codigo de respuesta de la Actividad 1 : " + resDaoLocal.getCod_error());
				if(resDaoLocal.getCod_error() == Integer.valueOf(ConstantesInternasSistema.CODIGO_EXITO)){
					
					ComunObjetoRequest datosLocal = new ComunObjetoRequest();
					datosLocal.setCiudadId(localCliente.getIdCiudad());
					datosLocal.setDireccion(validaciones.validarCamposString(localCliente.getDireccion()));
					datosLocal.setDistritoId(localCliente.getIdDistrito());
					datosLocal.setDivisionPaisId(localCliente.getIdDepartamento());
					datosLocal.setEmail(validaciones.validarCamposString(localCliente.getEmail()));
					datosLocal.setId(localCliente.getComunObjetoId());
					datosLocal.setPaisId(localCliente.getIdPais());
					datosLocal.setTelefono1(validaciones.validarCamposString(localCliente.getTelefono1()));
					
					GenericEntity resDaoObjetoLocal = null;
					try{
						System.out.println("//2.- Actualizamos los datos de dirrecion o locales del cliente");
						resDaoObjetoLocal = mantenimientoComunObjetoDao.actualizarComunObjeto(datosLocal);
					}catch(Exception e){
						System.out.println("Error en BD " + e);
						response.setCodigoRespuesta(ConstModAdministracion.MANT_EDITAR_COD_IDT);
						response.setMensajeRespuesta(ConstModAdministracion.MANT_EDITAR_MSJ_IDT.replace("msj", mensajeTransaccionMetodo));
						return response;
					}
					System.out.println("Codigo de respuesta de la Actividad 2 : " + resDaoObjetoLocal.getCod_error());
					if(resDaoObjetoLocal.getCod_error() == Integer.valueOf(ConstantesInternasSistema.CODIGO_EXITO)){
						response.setCodigoRespuesta(ConstantesInternasSistema.CODIGO_EXITO);
						response.setMensajeRespuesta(ConstantesInternasSistema.MENSAJE_EXITO);
					}else{
						System.out.println(mensajeTransaccionMetodo + "No se pudo Actualizar los locales o Direcciones de la tabla comun_objeto");
						response.setCodigoRespuesta(ConstModAdministracion.MANT_EDITAR_COD_IDF);
						response.setMensajeRespuesta(ConstModAdministracion.MANT_EDITAR_MSJ_IDF.replace("msj", mensajeTransaccionMetodo + resDaoObjetoLocal.getCod_error()));
					}
				}else{
					System.out.println(mensajeTransaccionMetodo + "No se pudo Actualizar los datos de la tabla Cliente_local");
					response.setCodigoRespuesta(ConstModAdministracion.MANT_EDITAR_COD_IDF);
					response.setMensajeRespuesta(ConstModAdministracion.MANT_EDITAR_MSJ_IDF.replace("msj", mensajeTransaccionMetodo + resDaoLocal.getCod_error()));
				}
		}
		if(localCliente.getCrud().equalsIgnoreCase("delete")){
			System.out.println("Eliminamos local");
			GenericEntity resDaoLocales=null;
			try{
				System.out.println("//1.- eliminamos locales del cliente");
				//1.- eliminamos locales del cliente
				resDaoLocales = mantLocalesClienteDao.eliminarLocalesCliente(localCliente.getIdLocal());
			}catch(Exception e){
				System.out.println(mensajeTransaccionMetodo + "Hubo un error al eliminar locales del cliente   en BD " +e);
				response.setCodigoRespuesta(ConstModAdministracion.MANT_EDITAR_COD_IDT);
				response.setMensajeRespuesta(ConstModAdministracion.MANT_EDITAR_MSJ_IDT.replace("msj", mensajeTransaccionMetodo));
				return response;
			}
			System.out.println("Codigo de respuesta de la Actividad 1 : " + resDaoLocales.getCod_error());
		    if(resDaoLocales.getCod_error() == Integer.valueOf(ConstantesInternasSistema.CODIGO_EXITO)){
		    	GenericEntity resDaoObjetos=null;
		    	try{
					System.out.println("//2.- eliminamos objetos que hacen referencia a los locales del cliente");
					//2.- eliminamos objetos que hacen referencia a los locales del cliente
					resDaoObjetos = mantenimientoComunObjetoDao.eliminarComunObjeto(localCliente.getComunObjetoId());
				}catch(Exception e){
					System.out.println(mensajeTransaccionMetodo + "Hubo un error al eliminar Objetos locales del cliente   en BD " +e);
					response.setCodigoRespuesta(ConstModAdministracion.MANT_EDITAR_COD_IDT);
					response.setMensajeRespuesta(ConstModAdministracion.MANT_EDITAR_MSJ_IDT.replace("msj", mensajeTransaccionMetodo));
					return response;
				}
		    	System.out.println("Codigo de respuesta de la Actividad 2 : " + resDaoObjetos.getCod_error());
		    	if(resDaoObjetos.getCod_error() == Integer.valueOf(ConstantesInternasSistema.CODIGO_EXITO)){
		    		response.setCodigoRespuesta(ConstantesInternasSistema.CODIGO_EXITO);
					response.setMensajeRespuesta(ConstantesInternasSistema.MENSAJE_EXITO);
		    	}else{
		    		System.out.println(mensajeTransaccionMetodo + "No se pudo eliminar de tabla objeto_comun");
					response.setCodigoRespuesta(String.valueOf(resDaoObjetos.getCod_error()));
					response.setMensajeRespuesta(resDaoObjetos.getMsj_error());
		    	}
		    }
		}
		
		return response;
	}

	@Override
	public GenericResponse registroMasivoCliente(String codTransaccion,
			ClienteRegistroRequest cliente) {
		String mensajeTransaccionMetodo = "[registroMasivoCliente idTx=" + codTransaccion + "] - ";
		GenericResponse response = new GenericResponse();
		
		GenericEntity registrarDao = null;
		try{
			registrarDao = mantenimientoClienteDao.registroMasicoCliete(cliente);
		}catch(Exception e){
			System.out.println(mensajeTransaccionMetodo + "Hubo un error al registrar en BD " +e);
			response.setCodigoRespuesta(ConstModAdministracion.MANT_EDITAR_COD_IDT);
			response.setMensajeRespuesta(ConstModAdministracion.MANT_EDITAR_MSJ_IDT.replace("msj", mensajeTransaccionMetodo));
			return response;
		}
		
		if(registrarDao.getCod_error() == Integer.valueOf(ConstantesInternasSistema.CODIGO_EXITO)){
			response.setCodigoRespuesta(ConstantesInternasSistema.CODIGO_EXITO);
			response.setMensajeRespuesta(ConstantesInternasSistema.MENSAJE_EXITO);
		}else{
			System.out.println(mensajeTransaccionMetodo + "No se pudo Registrar ");
			response.setCodigoRespuesta(String.valueOf(registrarDao.getCod_error()));
			response.setMensajeRespuesta(registrarDao.getMsj_error());
		}
		return response;
	}
	
}
